Azure Kubernetes Fleet Manager
Azure Kubernetes Fleet Manager は、複数の Azure Kubernetes Service (AKS) クラスターを統合的に管理・オーケストレーションするためのサービスです。マルチクラスター環境での運用を簡素化し、一貫性のある構成管理やアップデート戦略を実現します。
Fleet Manager とは
Fleet Manager は、複数の AKS クラスターを「フリート」としてグループ化し、以下の機能を提供します:
- 統合管理: 複数のクラスターを単一のコントロールプレーンから管理
- マルチクラスター Kubernetes リソース伝搬: Kubernetes リソースを複数のクラスターに効率的にデプロイ
- 段階的ロールアウト: クラスター全体への変更を段階的に適用
- 統一されたアップデート戦略: Kubernetes バージョンや構成のアップデートを一括管理
主要コンポーネント
1. Fleet Resource (フリートリソース)
Fleet は、複数の AKS クラスターをグループ化する論理的なコンテナです。
apiVersion: containerservice.azure.com/v1
kind: Fleet
metadata:
name: production-fleet
spec:
hubProfile:
dnsPrefix: production-fleet-hub
2. Member Cluster (メンバークラスター)
Fleet に参加する個々の AKS クラスターをメンバークラスターと呼びます。
# クラスターをFleetに参加させる
az fleet member create \
--resource-group myResourceGroup \
--fleet-name production-fleet \
--name cluster-east \
--member-cluster-id /subscriptions/.../clusters/aks-east
3. Hub Cluster (ハブクラスター)
Fleet Manager は、オプションで Hub Cluster を使用して、Kubernetes API を介した統合管理を提供します。
Kubernetes リソース伝搬
Fleet Manager を使用すると、Kubernetes リソースを複数のクラスターに効率的にデプロイできます。
ClusterResourcePlacement
ClusterResourcePlacement は、どのリソースをどのクラスターにデプロイするかを定義します。
apiVersion: placement.kubernetes-fleet.io/v1beta1
kind: ClusterResourcePlacement
metadata:
name: deploy-frontend
spec:
resourceSelectors:
- group: ""
version: v1
kind: Namespace
name: frontend
- group: apps
version: v1
kind: Deployment
labelSelector:
matchLabels:
app: frontend
policy:
placementType: PickAll
配置ポリシー
PickAll
すべてのメンバークラスターにリソースをデプロイします。
policy:
placementType: PickAll
PickN
指定した数のクラスターにデプロイします。
policy:
placementType: PickN
numberOfClusters: 3
PickFixed
特定のクラスターを指定してデプロイします。
policy:
placementType: PickFixed
clusterNames:
- cluster-east
- cluster-west
クラスターセレクター
ラベルに基づいてクラスターを選択できます。
policy:
placementType: PickAll
affinity:
clusterAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
clusterSelectorTerms:
- labelSelector:
matchLabels:
environment: production
region: japan
段階的ロールアウト (Update Strategy)
Fleet Manager は、変更を段階的に適用するための強力な機能を提供します。
Update Run
Update Run を使用して、クラスターのアップデートを段階的に実行します。
apiVersion: fleet.azure.com/v1alpha1
kind: UpdateRun
metadata:
name: k8s-upgrade-1-28
spec:
updateStrategyId: production-strategy
managedClusterUpdate:
upgrade:
type: Full
kubernetesVersion: 1.28.5
Update Strategy
アップデート戦略を定義して、ロールアウトの順序とタイミングを制御します。
apiVersion: fleet.azure.com/v1alpha1
kind: UpdateStrategy
metadata:
name: production-strategy
spec:
stages:
- name: dev-stage
groups:
- name: dev-clusters
afterStageWaitInSeconds: 3600
- name: prod-stage
groups:
- name: prod-east-clusters
- name: prod-west-clusters
afterStageWaitInSeconds: 7200
ステージとグループ
- Stage (ステージ): 順次実行される更新のフェーズ
- Group (グループ): 同時に更新されるクラスターのセット
- Wait Period: ステージ間の待機時間
ユースケース
1. マルチリージョンデプロイメント
複数のリージョンにまたがるアプリケーションを一括デプロイします。
apiVersion: placement.kubernetes-fleet.io/v1beta1
kind: ClusterResourcePlacement
metadata:
name: global-app-deployment
spec:
resourceSelectors:
- group: apps
version: v1
kind: Deployment
name: my-app
policy:
placementType: PickAll
affinity:
clusterAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
clusterSelectorTerms:
- labelSelector:
matchExpressions:
- key: region
operator: In
values:
- japaneast
- japanwest
- eastus
2. 環境別クラスター管理
開発、ステージング、本番環境のクラスターを効率的に管理します。
# 開発環境のFleet
az fleet create \
--resource-group dev-rg \
--name dev-fleet \
--location japaneast
# 本番環境のFleet
az fleet create \
--resource-group prod-rg \
--name prod-fleet \
--location japaneast \
--enable-hub
3. Kubernetes バージョンのアップグレード
すべてのクラスターの Kubernetes バージョンを段階的にアップグレードします。
apiVersion: fleet.azure.com/v1alpha1
kind: UpdateRun
metadata:
name: upgrade-to-1-29
spec:
updateStrategyId: safe-upgrade-strategy
managedClusterUpdate:
upgrade:
type: Full
kubernetesVersion: 1.29.0
nodeImageSelection:
type: Latest
ベストプラクティス
1. 適切なグルーピング
クラスターを論理的にグループ化し、ラベルを活用します。
# クラスターにラベルを付与
az aks update \
--resource-group myResourceGroup \
--name aks-cluster \
--tags environment=production region=japaneast tier=frontend
2. 段階的ロールアウトの実装
本番環境への変更は、必ず段階的に実施します。
stages:
- name: canary
groups:
- name: canary-cluster
- name: production
groups:
- name: prod-clusters
afterStageWaitInSeconds: 86400 # 24時間待機
3. モニタリングとオブザーバビリティ
各ステージでのアップデートの成功/失敗を監視します。
# Update Runのステータス確認
az fleet updaterun show \
--resource-group myResourceGroup \
--fleet-name production-fleet \
--name upgrade-run-1
4. ロールバック戦略
問題が発生した場合のロールバック手順を事前に定義します。
apiVersion: fleet.azure.com/v1alpha1
kind: UpdateRun
metadata:
name: rollback-to-1-28
spec:
updateStrategyId: emergency-rollback
managedClusterUpdate:
upgrade:
type: Full
kubernetesVersion: 1.28.5
5. リソース伝搬の検証
デプロイ前に、リソース配置が正しいことを確認します。
# ClusterResourcePlacementのステータス確認
kubectl get clusterresourceplacement deploy-frontend -o yaml
Fleet Manager と GitOps の統合
Fleet Manager は GitOps ツール (FluxCD, Argo CD) と組み合わせて使用できます。
apiVersion: source.toolkit.fluxcd.io/v1
kind: GitRepository
metadata:
name: fleet-config
namespace: flux-system
spec:
interval: 1m
url: https://github.com/myorg/fleet-config
ref:
branch: main
---
apiVersion: kustomize.toolkit.fluxcd.io/v1
kind: Kustomization
metadata:
name: fleet-placements
namespace: flux-system
spec:
interval: 10m
sourceRef:
kind: GitRepository
name: fleet-config
path: ./placements
prune: true
制限事項
- Fleet ごとに最大 100 のメンバークラスターまで参加可能
- Hub Cluster は単一リージョンに配置される
- クラスター間のネットワーク通信は自動で構成されない
- 一部の Kubernetes リソースタイプは伝搬できない場合がある
まとめ
Azure Kubernetes Fleet Manager は、マルチクラスター環境の管理を大幅に簡素化します。統合管理、マルチクラスターデプロイメント、段階的ロールアウトなどの機能により、エンタープライズレベルのKubernetes運用を実現できます。
適切な戦略とベストプラクティスを適用することで、スケーラブルで信頼性の高いマルチクラスター環境を構築できます。